package com.ia.aistream.manager.operating.util.style;

import com.spire.doc.Table;
import com.spire.doc.TableCell;
import com.spire.doc.TableRow;

/**
 * @author XiaoYu
 */
public class DocTableStyle {

    // 声明默认的表格宽度 500/100
    private static final int TABLE_WIDTH = 5;

    /*** 获取列的宽度 **/
    public static float getCellWidth(TableCell tableCell){
        float width = tableCell.getWidth();
        // 判断列的宽度是否为百分比
        if (tableCell.getCellWidthType().toString().equals("Percentage")){
            width = tableCell.getWidth() * TABLE_WIDTH;
        }
        if(width<2){
            return 0;
        }
        return width;
    }

    /*** 获取表格的宽度 */
    public static float getTableWidth(Table table){
        return table.getWidth();
    }

    /*** 获取行的高度 */
    public static float getRowHeight(TableRow tableRow){
        return tableRow.getHeight();
    }

    /***
     * 获取单元格的列合并
     * @param table
     * @param row
     * @param col
     * @return
     */
    public static Integer getColsMerge(Table table, int row, int col, int maxCell){

        // 获取单元格的列宽
        float currCellWidth = table.getRows().get(row).getCells().get(col).getWidth();
        // 获取整个table的宽度
        float width = 0.0f;
        // 记录每列的值
        float[] cellArray = new float[maxCell];
        // 循环整个表格,找到最大列，然后记录每列的列宽
        for (int r=0; r<table.getRows().getCount(); r++){
            int count = table.getRows().get(r).getCells().getCount();
            if(count==maxCell){
                for (int c=0; c<table.getRows().get(r).getCells().getCount(); c++){
                    cellArray[c] = table.getRows().get(r).getCells().get(c).getWidth();
                    width = width + table.getRows().get(r).getCells().get(c).getWidth();
                }
                break;
            }
        }

        // 如果当前列等于表格宽度，则整行合并
        if(Math.abs(width-currCellWidth)<2){
            return maxCell;
        }

        // 记录当前列前的宽度
        float colPreWidth = 0.0f;
        float colAfterWidth = 0.0f;
        // 第一列数据的处理
        if(col==0){
            for(int a=0; a<cellArray.length; a++) {
                colAfterWidth = colAfterWidth + cellArray[a];
                if (Math.abs(colAfterWidth -currCellWidth)<2) {
                    return a+1>1?a+1:1;
                }
            }
            return 1;
        }
        // 获取当前列之前所有列的宽度
        float widthCol = 0.0f;
        for (int c=0; c<col; c++){
            widthCol = widthCol + table.getRows().get(row).getCells().get(c).getWidth();
        }

        // 处理当前列的数据
        int colNum = 0;
        for(int a=0; a<cellArray.length; a++){
            if(Math.abs(widthCol-colPreWidth)<2){
                colAfterWidth = colAfterWidth + cellArray[a];
                if(Math.abs(colAfterWidth-currCellWidth)<2){
                    return a+1-colNum>1?a-colNum+1:1;
                }
            }else{
                colPreWidth = colPreWidth + cellArray[a];
                colNum++;
            }
        }

        return 1;
    }
    /***
     * 获取单元格行合并数
     * @param table
     * @param row
     * @param col
     * @return
     */
    public static Integer getRowsMerge(Table table, int row, int col){
        int index = 0;
        boolean flag = true;
        // 计算总的长度
        double length = 0.0;
        int indexCell = col;
        for(int r=row; r<table.getRows().getCount(); r++){
            double othLength = 0.0;

            // 获取每一行的列数
            int count = table.getRows().get(r).getCells().getCount();
            // 获取某一列前的所有列的宽度
            for(int c=0; c<count; c++){
                TableCell tableCell = table.getRows().get(r).getCells().get(c);
                float cellWidth = getCellWidth(tableCell);
                // 获取开始位置的列宽度
                if(r==row && c<col){
                    length = length + cellWidth;
                }else if(r!=row){
                    // 计算其他列的宽度
                    if(Math.abs(length-othLength)<5.0){
                        indexCell = c;
                        break;
                    }

                    othLength = othLength + cellWidth;
                }
            }

            if(indexCell >= table.getRows().get(r).getCells().getCount()){
                return index;
            }

            String s = table.getRows().get(r).getCells().get(indexCell).getCellFormat().getVerticalMerge().toString();
            if(flag && s.equals("Start")){
                index = 1;
            }else if(index>0 && s.equals("Continue")){
                flag = false;
                index ++;
            }else{
                break;
            }

        }
        return index>0?index:1;
    }

}
